import axios from "axios";
import { useLoadingStore } from "~/stores/loading";

export default defineNuxtPlugin((nuxtApp) => {
  const api = axios.create({
    baseURL: "/api",
    timeout: 30000,
  });

  // 通过 nuxtApp.$pinia 获取 pinia 实例
  const getLoadingStore = () =>
    useLoadingStore(nuxtApp.$pinia as import("pinia").Pinia);

  // 请求拦截
  api.interceptors.request.use((config) => {
    getLoadingStore().startLoading();
    return config;
  });

  // 响应拦截
  api.interceptors.response.use(
    (response) => {
      getLoadingStore().endLoading();
      return response;
    },
    (error) => {
      getLoadingStore().endLoading();
      return Promise.reject(error);
    }
  );

  // 通用请求方法
  const request = (config: import("axios").AxiosRequestConfig) =>
    api.request(config);

  return {
    provide: {
      api: {
        request,
        // 也可按需扩展 get/post/put/delete 等方法
        get: (url: string, config?: import("axios").AxiosRequestConfig) =>
          api.get(url, config),
        post: (
          url: string,
          data?: any,
          config?: import("axios").AxiosRequestConfig
        ) => api.post(url, data, config),
      },
    },
  };
});
